// pages/mtest/messagecenter/mcMessage/mcMessage.js

const app = getApp()
const networkUtil = app.globalData.networkUtil
const networkUtilV2 = app.globalData.networkUtilV2
const util = app.globalData.util

const logPrefix = "messagecenter.mcMessage"

Page({

    /**
     * 页面的初始数据
     */
    data: {
        //消息类别相关字段
        mcCateId: null,
        mcCateName: null,
        mcCateDes: null,
        //消息列表
        mcMessageList: [],

        //分页参数
        pageNum: 1,
        pageSize: 10,
        loadMoreText: "加载更多~",
        noMoreText: "没有更多了哦~",
        totalPages: 1,
        //是否已全部加载
        noMore: false,



    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function(options) {
        //console.info(logPrefix +" onLoad().options", options)
        let that = this
        //获取mcCate信息
        let mcCate = JSON.parse(options.mcCate)

        //设置页面的标题
        wx.setNavigationBarTitle({
            title: mcCate.mcCateName,
        })

        that.setData({
            mcCateId: mcCate.mcCateId,
            mcCateName: mcCate.mcCateName,
            mcCateDes: mcCate.mcCateName + "列表"
        })

        //根据mcCateId获取该类别下的"第一页"消息列表。
        that.getMcMessageByMcCateId_firstPage()

    },

    /**
     * 根据mcCateId获取该类别下的"第一页"消息列表。
     */
    getMcMessageByMcCateId_firstPage: function() {
        let that = this
        let url = app.globalData.baseUrl + "/msgcenter/getMcMessageByMcCateIdByPage"
        let requestData = {
            mcCateId: that.data.mcCateId,
            pageNum: 1,
            pageSize: that.data.pageSize
        }
        networkUtil.request_get(url, requestData).then((res) => {
            //若已获取到
            that.setData({
                mcMessageList: res.data.records,
                pageNum: res.data.current,
                pageSize: res.data.size,
                totalPages: res.data.pages,
                noMore: (res.data.current >= res.data.pages) ? true : false
            })
            //若that.data.mcMessageList.length为0
            if (that.data.mcMessageList.length == 0) {
                util.showToast("未找到相关消息")
            }
        }).catch((res) => {
            //若未获取到
            console.error(logPrefix + " getMcMessageByMcCateId_firstPage(),获取消息列表出错!", res)
            util.showToastWithMsg("获取消息列表出错", res.message)
        })
    },

    /**
     * 1、若该消息的showDes为false,将showDes置为true,并将其他消息的showDes置为false。
     * 1-2、若该消息的状态为 "未读",将其更新为 "已读"。
     * 2、若该消息的showDes为true,将showDes置为false。
     */
    readMsg: function(event) {
        let that = this
        let mcMessageId = event.currentTarget.dataset.mc_message_id
        let mcMessageList = that.data.mcMessageList
        let mcMessage = null

        //0、寻找到该消息
        for (let i = 0; i < mcMessageList.length; i++) {
            if (mcMessageList[i].mcMessageId == mcMessageId) {
                mcMessage = mcMessageList[i]
                break
            }
        }
        //若mcMessage为null
        if (mcMessage == null) {
            return
        }

        /**
         * 1、若该消息的showDes为false,将showDes置为true,并将其他消息的showDes置为false。
         */
        if (mcMessage.showDes == null || mcMessage.showDes == false) {
            mcMessage.showDes = true

            for (let k = 0; k < mcMessageList.length; k++) {
                if (mcMessageList[k].mcMessageId != mcMessageId) {
                    mcMessageList[k].showDes = false
                }
            }

            //获取其跳转页提示
            let jumpTitle = that.getJumpTitle(mcMessage.jumpType)
            mcMessage.jumpTitle = jumpTitle

            /**
             * 1-2、若该消息的状态为 "未读",将其更新为 "已读"。
             */
            if (mcMessage.status == 1) {
                mcMessage.status = 2
                //请求后台将消息状态置为"已读"。
                that.updateMcMessageStatus_read(mcMessageId)
            }

            //渲染页面
            that.setData({
                mcMessageList: mcMessageList
            })
        } else {
            /**
             * 2、若该消息的showDes为true,将showDes置为false。
             */
            mcMessage.showDes = false

            //渲染页面
            that.setData({
                mcMessageList: mcMessageList
            })
        }
    },

    /**
     * 请求后台将消息状态置为"已读"。
     */
    updateMcMessageStatus_read: function(mcMessageId = null) {
        let that = this
        let url = app.globalData.baseUrl + "/msgcenter/readMcMessage"
        let requestData = {
            mcMessageId: mcMessageId
        }
        networkUtilV2.httpPost(url, requestData, false).then((res) => {
            //若更新成功
        }).catch((res) => {
            //若更新失败
            console.error(logPrefix + " updateMcMessageStatus_read(),请求后台将消息状态置为已读,出错!", res)
            util.showToastWithMsg("将消息状态置为已读,出错", res.message)
        })
    },

    /**
     * "删除消息"的对话框。
     */
    delMcMessage_dialog: function(event) {
        let that = this
        wx.showModal({
            title: '删除该条记录',
            confirmText: "删除",
            cancelText: "取消",
            success: function(res) {
                if (res.confirm) {
                    //删除该消息,并请求后台删除该消息。
                    that.delMcMessage(event)
                }
            }
        })
    },

    /**
     * 删除该消息,并请求后台删除该消息。
     */
    delMcMessage: function(event) {
        //console.log(logPrefix+" delMcMessage().event",event)

        let that = this
        let mcMessageId = event.currentTarget.dataset.mc_message_id
        let mcMessageList = that.data.mcMessageList

        for (let i = 0; i < mcMessageList.length; i++) {
            if (mcMessageList[i].mcMessageId == mcMessageId) {
                /**
                 * 1、删除该消息,并请求后台删除该消息。
                 */
                mcMessageList.splice(i, 1)
                //1-2、请求后台删除mcMessageId对应的消息。
                that.delMcMessageById(mcMessageId)

                //渲染页面
                that.setData({
                    mcMessageList: mcMessageList
                })
                break
            }
        }
    },

    /**
     * 请求后台删除mcMessageId对应的消息。
     */
    delMcMessageById: function(mcMessageId = null) {
        let that = this
        let url = app.globalData.baseUrl + "/msgcenter/delMcMessageById"
        let requestData = {
            mcMessageId: mcMessageId
        }
        networkUtilV2.httpPost(url, requestData, false).then((res) => {
            //若更新成功
        }).catch((res) => {
            //若更新失败
            console.error(logPrefix + " delMcMessageById(),请求后台删除mcMessageId对应的消息,出错!", res)
            util.showToastWithMsg("删除消除出错", res.message)
        })
    },

    /**
     * 跳转到另一个页面。
     */
    jumpToAnotherPage: function(event) {
        let that = this
        let mcMessage = event.currentTarget.dataset.mc_message
        let jumpType = mcMessage.jumpType
        let jumpValue = mcMessage.jumpValue

        //不需要跳转
        if (jumpType == null || jumpType == 0) {
            return
        }

        //健康打卡页面
        if (jumpType == 1) {
            wx.navigateTo({
                url: '/subpackModule/pages/physicalCondition/addPhysicalCondition/addPhysicalCondition'
            })
        }
    },

    /**
     * 根据jumpType展示对应的"跳转说明"。
     */
    getJumpTitle: function(jumpType = 0) {
        let jumpTitle = null;

        switch (jumpType) {
            case 0:
                jumpTitle = "不跳转"
                break
            case 1:
                jumpTitle = "去健康打卡"
                break
        }
        return jumpTitle
    },

    /**
     * "一键已读"的对话框。
     */
    readAll_dialog: function(event) {
        let that = this
        wx.showModal({
            title: '一键已读',
            content: '将未读消息置为"已读"',
            confirmText: "确定",
            cancelText: "取消",
            success: function(res) {
                if (res.confirm) {
                    //一键已读
                    that.readAll()
                }
            }
        })
    },

    /**
     * 一键已读,将某类别下未读消息的状态置为"已读"。
     */
    readAll: function() {
        let that = this
        let url = app.globalData.baseUrl + "/msgcenter/readMcMessageByMcCateId"
        let requestData = {
            mcCateId: that.data.mcCateId
        }
        networkUtilV2.httpPost(url, requestData).then((res) => {
            //若更新成功
            //根据mcCateId获取该类别下的"第一页"消息列表。
            that.getMcMessageByMcCateId_firstPage()

        }).catch((res) => {
            //若更新出错
            console.error(logPrefix + " 将某类别下未读消息的状态置为'已读',出错!", res)
        })
    },

    /**
     * "一键删除"的对话框。
     */
    delAll_dialog: function(event) {
        let that = this
        wx.showModal({
            title: '一键删除',
            content: '删除已读消息',
            confirmText: "确定",
            cancelText: "取消",
            success: function(res) {
                if (res.confirm) {
                    //一键已读
                    that.delAll()
                }
            }
        })
    },

    /**
     * 一键删除,删除某类别下的已读消息。
     */
    delAll: function() {
        let that = this
        let url = app.globalData.baseUrl + "/msgcenter/delMcMessageByMcCateId"
        let requestData = {
            mcCateId: that.data.mcCateId
        }
        networkUtilV2.httpPost(url, requestData).then((res) => {
            //若更新成功
            //根据mcCateId获取该类别下的"第一页"消息列表。
            that.getMcMessageByMcCateId_firstPage()

        }).catch((res) => {
            //若更新出错
            console.error(logPrefix + " 删除某类别下的已读消息,出错!", res)
        })
    },


    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function() {
        let that = this
        //根据mcCateId获取该类别下的"第一页"消息列表。
        that.getMcMessageByMcCateId_firstPage()
        setTimeout(() => {
            wx.stopPullDownRefresh()
        }, 1000)
    },

    /**
     * 页面上拉触底事件的处理函数
     * 获取 "下一页"消息。
     */
    onReachBottom: function() {
        //分析是否已全部加载
        let that = this
        if (that.data.pageNum >= that.data.totalPages) {
            that.setData({
                noMore: true
            })
            return
        }

        /**
         * 若没有全部加载，加载下一页消息。
         */
        let url = app.globalData.baseUrl + "/msgcenter/getMcMessageByMcCateIdByPage"
        let requestData = {
            mcCateId: that.data.mcCateId,
            pageNum: that.data.pageNum + 1,
            pageSize: that.data.pageSize
        }
        networkUtil.request_get(url, requestData).then((res) => {
            //若已获取到
            that.setData({
                mcMessageList: that.data.mcMessageList.concat(res.data.records),
                pageNum: res.data.current,
                pageSize: res.data.size,
                totalPages: res.data.pages,
                noMore: (res.data.current >= res.data.pages) ? true : false
            })
        }).catch((res) => {
            //若未获取到
            console.error(logPrefix + " onReachBottom(),获取消息列表出错!", res)
        })
    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function() {

    }
})